14.2.1 简单应用
本章后续的内容会一直使用示例应用 AtSea Shop 。该示例托管在Github的 dockersamples/atsea-sample-shop-app
库中,基于Apache 2.0许可证开源。
使用该应用是因为其复杂度适中,不会因为太复杂而难以完整解释。除此之外,该应用还是个多服务应用,并且利用了认证和安全相关的技术。应用架构如图14.2所示。
如图所示,该应用由5个服务、3个网络、4个密钥以及3组端口映射构成。具体细节将会结合Stack文件进行分析。
注:
在本章中用到服务一词时,指的是Docker服务(由若干容器组成的集合,作为一个整体进行统一管理,并且在Docker API中存在对应的服务对象)。
复制Github仓库,以获取全部源代码文件。
$ git clone https://github.com/dockersamples/atsea-sample-shop-app.git Cloning
into 'atsea-sample-shop-app'...
remote: Counting objects: 636, done.
remote: Total 636 (delta 0), reused 0 (delta 0), pack-reused 636
Receiving objects: 100% (636/636), 7.23 MiB | 28.25 MiB/s, done.
Resolving deltas: 100% (197/197), done.
该应用的代码由若干目录和源码文件组成。读者可以随意浏览这些文件。但是接下来,重点关注的文件是 docker-stack.yml
。该文件通常被称为Stack文件,在该文件中定义了应用及其依赖。
在该文件整体结构中,定义了4种顶级关键字。
version:
services:
networks:
secrets:
version 代表了Compose文件格式的版本号。为了应用于Stack,需要3.0或者更高的版本。 services 中定义了组成当前应用的服务都有哪些。 networks 列出了必需的网络, secrets 定义了应用用到的密钥。
如果展开顶级的关键字,可以看到类似图14.2中的结构。Stack文件由5个服务构成,分别为“reverse_proxy”“database”“appserver”“visualizer”“payment_gateway”。Stack文件中包含3个网络,分别为“front-tier”“back-tier”“payment”。最后,Stack文件中有4个密钥,分别为“postgres_password”“staging_token”“revprox_key”“revprox_cert”。
version: "3.2"
services:
reverse_proxy:
database:
appserver:
visualizer:
payment_gateway:
networks:
front-tier:
back-tier:
payment:
secrets:
postgres_password:
staging_token:
revprox_key:
revprox_cert:
Stack文件定义了应用的很多依赖要素,理解这一点很重要。因此,Stack文件是应用的一个自描述文件,并且作为一个很好的工具弥合了开发和运维之间的隔阂。
接下来一起深入分析Stack文件的细节。